# encoding: utf-8


"""
global关键字修饰变量后标识该变量是全局变量，对该变量进行修改就是修改全局变量
nonlocal关键字修饰变量后标识该变量是上一级函数中的局部变量，如果上一级函数中不存在该局部变量，nonlocal位置会发生错误

global关键字可以用在任何地方，包括最上层函数中和嵌套函数中，即使之前未定义该变量，global修饰后也可以直接使用
nonlocal关键字只能用于嵌套函数中
"""
abc = 10  # 全局变量abc
num = 100  # 全局变量num


def outer():
    print('这个是外函数')
    abc = 123  # outer函数的局部变量abc
    num = 10  # outer函数的局部变量num
    print(abc)


    def inner_global():
        print('这个是内函数')
        global num  # 标识该变量是全局变量，对该变量进行修改就是修改全局变量
        num += 10  # 此处修改的是outer函数外面的num
        print(num)

    def inner_nonlocal():
        print('这个是内函数')
        nonlocal num  # 标识该变量是上一级函数中的局部变量变量
        num += 10  # 此处修改的是outer函数内定义的num
        print(num)